package com.co.notaweb.entities;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.co.notaweb.entities.system.Usuario;
import com.co.notaweb.util.Constants;

/**
 * @author PC
 * @version 1.0
 * @created 13-nov-2011 12:14:25
 */
@Entity
@NamedQueries({ @NamedQuery(name = "Persona.personaByUsername", query = "SELECT p FROM Persona p JOIN FETCH p.usuario LEFT JOIN FETCH p.usuario.roles WHERE p.usuario.username = :username"),
   @NamedQuery(name = "Persona.allPersonas", query = "SELECT p FROM Persona p JOIN FETCH p.usuario LEFT JOIN FETCH p.usuario.roles")})

@Table(name = "PERSONA")
public class Persona {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;

	private String codigo;
	private long documento;
	private String nombre;
	private String apellido;

	@OneToOne
	private Usuario usuario = new Usuario();

	public long 
	getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public long getDocumento() {
		return documento;
	}

	public void setDocumento(long documento) {
		this.documento = documento;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public String getNombreCompleto(){
		return nombre + " " + apellido;
	}

	public String getTipo() {
		if (this instanceof Docente) {
			return Constants.PERSONA_TIPO_DOCENTE;
		} else if (this instanceof Estudiante) {
			return Constants.PERSONA_TIPO_ESTUDIANTE;

		} else if (this instanceof PersonaGenerica) {
			return Constants.PERSONA_TIPO_GENERICA;
		}
		return "";
	}	
}	